﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>

//int main() {
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	printf("&arr[0] = %p\n" ,&arr[0]);
//	printf("arr     = %p\n" ,arr);	 //arr和&arr[0]都是访问数组首元素的地址
//	return 0;
//}

//int main() {
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	printf("%zd", sizeof(arr)); //数组中只有sizeof()和&arr是取整个数组
//	return 0;
//}

//int main() {
//	
//		int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//		printf("&arr[0] =   %p\n", &arr[0]);
//		printf("&arr[0]+1 = %p\n", &arr[0] + 1);
//		printf("arr =       %p\n", arr);
//		printf("arr+1 =     %p\n", arr + 1);
//		printf("&arr =      %p\n", &arr);
//		printf("&arr+1 =    %p\n", &arr + 1); //&arr是取整个数组,arr和&arr[0]是取首元素地址
//		return 0;
//}

//使⽤指针访问数组
//int main() {
//	int arr[10] = { 0 };
//	int* p = arr;
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int i = 0;
//	for (; i < sz; i++) {
//		scanf("%d", p+i);
//	}
//	for (i = 0; i < sz; i++) {
//		printf("%d ", *(p + i));
//	}
//	return 0;
//}

//
//void test(int* arr)//参数写成指针形式
//{
//	printf("%d\n", sizeof(arr));//计算⼀个指针变量的⼤⼩
//}
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	test(arr);
//	return 0;
//}

//冒泡排序
//void Bubble_Sort(int arr[], int sz) {
//	int temp = 0;
//	int flag = 1;
//	for (int i = 0; i < sz - 1; i++) {
//		for (int j = 0; j < sz - i- 1; j++) {
//			if (arr[j] > arr[j + 1]) {
//				temp = arr[j];
//				arr[j] = arr[j + 1];
//				arr[j + 1] = temp;
//				flag = 0;
//			}
//		}
//		if (flag == 1)
//			break;
//	}
//}
//
//void Print_Sort(int arr[], int sz) {
//	for (int i = 0; i < sz; i++) {
//		printf("%d ", arr[i]);
//	}
//	printf("\n");
//}
//
//int main() {
//	int arr[] = { 4,5,6,1,2,3,7,8,10,9 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	Print_Sort(arr, sz);
//	Bubble_Sort(arr, sz);
//	Print_Sort(arr, sz);
//	return 0;
//}


////⼆级指针
//int main(){
//	int a = 10;
//	int* ps = &a;
//	int** pc = &ps;
//	**pc = 20;
//	printf("%d\n", a);
//	printf("%d\n", *ps);
//	return 0;
//}

//指针数组模拟⼆维数组
//int main() {
//	int arr1[] = { 3,4,5,6,7 };
//	int arr2[] = { 1,2,3,4,5 };
//	int arr3[] = { 6,7,8,9,10 };
//	int *arr[] = {arr1,arr2,arr3};
//	for (int i = 0; i < 3; i++) {
//		for (int j = 0; j < 5; j++) {
//			printf("%d ", arr[i][j]); //arr[i]分别访问arr1,arr2,arr3中的首元素地址，arr[i][j]访问arr1.arr2.arr3中的元素。
//		}
//		printf("\n");
//	}
//	return 0;
//}


//字符指针变量
//int main() {
//	char c = 'w';
//	char* p = &c;
//	*p = 'c';
//	printf("%c", c);
//	return 0;
//}

//int main() {
//	const char* p = "hello world";                  
//	//p中存的是字符串常量，不能被更改
//	/**ps = 'c';*/
//	printf("%s\n", p);
//}


//int main()
//{
//	char str1[] = "hello bit.";
//	char str2[] = "hello bit.";
//	const char* str3 = "hello bit.";
//	const char* str4 = "hello bit.";
//	if (str1 == str2)
//		printf("str1 and str2 are same\n");
//	else
//		printf("str1 and str2 are not same\n"); //比较str1与str2地址不同。
//
//	if (str3 == str4)
//		printf("str3 and str4 are same\n");//字符串常量不能被更改，存一个就够了，str3与str4指向的都是同一块内存。
//	else
//		printf("str3 and str4 are not same\n");
//
//	return 0;
//}

//数组指针变量
//int main() {
//	int arr[] = { 0 };
//	int(*p)[5] = &arr;
//	return 0;
//}

//使用指针打印数组内容
//void Print(int arr[], int sz) {
//	int i = 0;
//	int* p = arr;
//	for (i = 0; i < sz; i++) {
//		printf("%d ", *(p + i));
//	}
//}
//
//int main() {
//	int arr[] = { 1,2,3,4,5,6,7 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	Print(arr, sz);
//	return 0;
//}


//写一个函数，判断一个字符串是否为另外一个字符串旋转之后的字符串
//char* Func(char* src, char* find) {
//	char temp[266] = { 0 };
//	strcpy(temp,src);
//	strcat(temp, src);
//	return strstr(temp, find);
//}
//
//int main() {
//	char* str1 = "AABCD";
//	char* str2 = "BCDAA";
//	char* ret = Func(str1,str2);
//	if (ret != NULL)
//		printf("找到了！");
//	else
//		printf("没找到！");
//	return 0;
//}

//杨氏矩阵
//int FindNum(int arr[][3], int x, int y, int key) {
//	int i = 0;
//	int j = y - 1;
//	while (i < x && j >= 0) {
//		if (arr[i][j] < key)
//			i++;
//		else if (arr[i][j] > key)
//			j--;
//		else
//			return 1;
//	}
//	return 0;
//}
//
//int main() {
//	int arr[][3] = { {1,2,3},{4,5,6},{7,8,9} };
//	int ret = FindNum(arr, 3, 3, 9);
//	printf("%d\n", ret);
//	return 0;
//}

//猜凶手
//void FindKiller() {
//	char killer = 'a';
//	for (; killer <= 'd'; killer++) {
//		if ((killer != 'a') + (killer != 'b') + (killer == 'c') + (killer == 'd') == 3) {
//			printf("凶手是%c", killer);
//			return;
//		}
//	}
//}
//
//int main() {
//	FindKiller();
//}

//杨辉三角
//void YangHuiTriAngle(int arr[][4], int n) {
//	for (int i = 0; i < n; i++) {
//		for (int j = 0; j <= i; j++) {
//			if (i == j || j == 0)
//				arr[i][j] = 1;
//			else
//				arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
//		}
//	}
//}
//
//int main() {
//	int arr[4][4] = { 0 };
//	YangHuiTriAngle(arr, 4);
//	for (int i = 0; i < 4; i++) {
//		for (int j = 0; j <= i; j++) {
//			printf("%d ", arr[i][j]);
//		}
//		printf("\n");
//	}
//	return 0;
//}